我們在[Day 4] CI基本設定有提到database的相關設定!今天我們要接續來說CI要怎麼操作資料庫!
原始SQL:
SELECT `name` FROM `data` WHERE `data_id` = <ID>;
先來對照一下
原生PHP寫法(使用PDO)
function originalPhp($id) {
$dbhost = '127.0.0.1';
$dbuser = 'root';
$dbpasswd = '';
$dbname = 'ironman2020';
$dsn = "mysql:host=".$dbhost.";dbname=".$dbname;
try
{
$conn = new PDO($dsn,$dbuser,$dbpasswd);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo "Connection failed: ".$e->getMessage();
}
$sql = "SELECT `name` FROM `data` WHERE `data_id` = " . $id .";"; //$id 是data id
$sth = $conn->prepare($sql);
$sth->execute();
$rows = $sth->fetchAll(PDO::FETCH_ASSOC);
return $rows;
}
CI 寫法
function selectCi($id) {
$db = $this->load->database('default',true); //指定資料庫連線,default要對應到/config/database.php中$db的key
return $db
->from('data')
->where(
array(
'data_id' => $id
)
)
->select('name')
->get()
->result_array(); //就這樣! 夠簡潔吧!
}
原始SQL:
INSERT INTO `data` (`name`) VALUES ('test')
CI 寫法
function createCi() {
$db = $this->load->database('default',true); //指定資料庫連線,default要對應到/config/database.php中$db的key
$db
->set(
array(
'name' => 'test'
)
)
->insert('data');
}
原始SQL:
UPDATE `data` SET `name` = 'change' WHERE `data_id` = <id>;
CI 寫法
function createCi() {
$db = $this->load->database('default',true); //指定資料庫連線,default要對應到/config/database.php中$db的key
$db
->set(
array(
'name' => 'change'
)
)
->where('data_id',$id)
->update('data');
}
原始SQL:
DELETE FROM `data` WHERE `data_id` = <id>;
CI 寫法
function createCi() {
$db = $this->load->database('default',true); //指定資料庫連線,default要對應到/config/database.php中$db的key
$db
->where('data_id',$id)
->delete('data');
}
因時間及篇幅問題,只有寫最基本的,詳細的可以參考:https://codeigniter.org.tw/userguide3/database/query_builder.html
看了文末所附網址的文章之後,
我有一個錯覺,CI所提供的一堆資料庫相關的函數、類別、函數等等,也是一土拉谷,花樣百出、份量不少,要完全搞通也不容易,和學習 pdo 或原生 sql ,差不多一樣辛苦。
對!其實就是這樣
但是框架可以解決很多事情,像是換資料庫系統的時候只要改config,他也幫你解決了很多麻煩事,像防SQL injection之類的
還有你不覺得寫->
比寫SQL語句好看多了嗎(易讀性)!
請教一下,是否其它框架,也會有類似的一土拉谷的資料庫操作類別函數?
你也可以看看laravel的!
https://laravel.com/docs/8.x/queries